//================v1要点总结===============
/**
 * 1. 注意，只能相邻两个节点
 * 2. 从子节点倒着比较查找
 * 3. 每行得倒着来，避免相互影响
 */

/**
 * 
 * @param {number[][]} triangle
 * @return {number}
 */
var minimumTotal = function (triangle) {

    let len = triangle.length;
    // 复制
    let minPath = new Array(len).fill(0);
    // 从第一层开始，每一层都要与对应的上一层路径最小值相加，得到新一层的最小值
    for (let i = 0; i < len; i++) {
        let tempI = i;
        while (tempI >= 0) {
            if (tempI - 1 >= 0) {
                minPath[tempI] = triangle[i][tempI] + Math.min(minPath[tempI], minPath[tempI - 1])
            } else {
                minPath[tempI] = triangle[i][tempI] + minPath[tempI]
            }
            tempI--;
        }
        if (i + 1 < len) {
            minPath[i + 1] += minPath[i]
        }
    }
    return Math.min(...minPath)
};

console.log(minimumTotal([[2], [3, 4], [6, 5, 7], [4, 1, 8, 3]]))